package userUI;
import handler.DatabaseHandler;
import handler.DirectoryHandler;
import pojo.Student;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

public class Userinterface extends JFrame {
    /** 用来存储选择文件夹后返回的路径*/
    public static String P;
    public static void main(String[] args) {
        Userinterface one=new Userinterface();
        one.Useinterface();
    }
    /** 用户ui界面，内容包括创建组件和框架，自定义组件位置和大小，布局管理，设置按钮响应事件*/
    public void Useinterface() {
        JPanel panel1=new JPanel();
        panel1.setLayout(null);
        JFrame frame=new JFrame("期末作业-成绩统计");
        frame.setBounds(400,300,400,300);/** 设置框架大小*/
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/** 设置关闭*/
        JTextField textField = new JTextField(30);/** 可输入文本框*/
        JTextArea textArea=new JTextArea(30,30);/** 文本空间*/
        JButton button1 = new JButton("导入");/** 创建所需组件*/
        JButton button2 = new JButton("查询平均分");
        JButton button3 = new JButton("查询最高分数");
        JButton button4 = new JButton("重置数据库");
        JButton jb = new JButton("选择文件夹");
        JLabel label = new JLabel("请选择要解析的文件所在的路径");
        JLabel label1 = new JLabel("所有学生的平均成绩为：");
/** 自定义组件位置及大小*/
        textArea.setBounds(150,90,100,40);
        label.setBounds(10,10,300,20);
        label1.setBounds(10,100,250,20);
        textField.setBounds(10,40,300,30);
        button1.setBounds(10,150,100,30);
        button2.setBounds(120,150,100,30);
        button3.setBounds(240,150,120,30);
        button4.setBounds(240,200,120,30);
        jb.setBounds(10,200,100,30);

/** 设置按钮响应事件*/
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {/** 导入*/
                DirectoryHandler dr=new DirectoryHandler();
                DatabaseHandler db=new DatabaseHandler();
                List<Student> L1= new ArrayList<Student>();
                try {
                    L1=dr.directoryHandler(P);/** 得到所有文件信息的返回集*/
                    db.insertClassScore(L1);/** 将返回集插入数据库*/
                    db.insertAverageScore();/** 通过学生班级成绩表得到班级平均分表*/
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
            }
        });
        button2.addActionListener(new ActionListener() {/** 显示所有班级平均分*/
            @Override
            public void actionPerformed(ActionEvent e) {
                DatabaseHandler db=new DatabaseHandler();
                DecimalFormat tosort=new DecimalFormat("#.00");/** 将得到的double类型转换为只保留两位小鼠*/
                String avg;
                avg=String.valueOf(tosort.format(db.queryAverage()));/** 将double类型转换为String类型然后再文本空间输出*/
                textArea.setText(avg);
            }
        });
        button3.addActionListener(new ActionListener() {/** 显示最高成绩*/
            @Override
            public void actionPerformed(ActionEvent e) {
                DatabaseHandler db=new DatabaseHandler();
                DecimalFormat tosort=new DecimalFormat("#.00");/** 与显示平均成绩同理*/
                String avg;
                avg=String.valueOf(tosort.format(db.getmax()));
                textArea.setText(avg);
            }
        });
        button4.addActionListener(new ActionListener() {/** 重置数据库*/
            @Override
            public void actionPerformed(ActionEvent e) {
                DatabaseHandler db=new DatabaseHandler();
                textArea.setText(" ");
                if(db.renewall())/** 调用重置方法*/
                {
                    textField.setText("重置完成");
                }
                else {
                    textField.setText("重置失败");
                }
            }
        });
        jb.addActionListener(new ActionListener() {/** 选择文件夹*/
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser jfc = new JFileChooser();/** 创建JFileChooser对象*/
                jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                jfc.showDialog(new JLabel(), "选择");
                File file = jfc.getSelectedFile();
                if (file != null) {
                    P=file.getAbsolutePath();/** 获取文件路径*/
                    textField.setText(file.getAbsolutePath());
                }
            }
        });

/** 设置布局*/
        panel1.add(textArea);
        panel1.add(textField);
        panel1.add(button1);
        panel1.add(button2);
        panel1.add(button3);
        panel1.add(button4);
        panel1.add(label);
        panel1.add(label1);
        panel1.add(jb);
        panel1.setSize(400, 300);
        frame.add(panel1);
        frame.setVisible(true);
/** 关闭窗口时关闭应用程序*/
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}